ListView deki itemların yerleri neden değişiyor?
Merhabalar,
ListView içerisinde verilerim bulunuyor. Bu listenin herhangi bir itemındaki değeri artırıp o item'in verilerini güncelliyorum. Güncelleme işlemi gerçekleştirildiğinde listeyi aşağı-yukarı kaydırdığımda listedeki sayısını artırdığım item'ın yeri değişiyor. Tavsiyeleriniz nelerdir?
public class MainActivity extends ActionBarActivity {
private int pos;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(new CustomAdapter(MainActivity.this));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
pos = position;
}
});
}
public class CustomAdapter extends BaseAdapter {
private String[] array = {
"Item 1",
"Item 2",
"Item 3",
"Item 4",
"Item 5",
"Item 6",
"Item 7",
"Item 8",
"Item 9",
"Item 10",
"Item 11",
"Item 12",
"Item 13",
"Item 14",
"Item 15",
"Item 16",
"Item 17",
"Item 18",
"Item 19",
"Item 20",
"Item 21"
};
public LayoutInflater inflater;
private int countValue = 1;
private ViewHolder holder;
public CustomAdapter(Context context) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return array.length;
}
@Override
public Object getItem(int position) {
return array[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.item = (TextView) convertView.findViewById(R.id.item);
holder.reduce = (Button) convertView.findViewById(R.id.reduce);
holder.count = (TextView) convertView.findViewById(R.id.count);
holder.increase = (Button) convertView.findViewById(R.id.increase);
holder.increase.setTag(position);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.item.setText(array[position]);
holder.increase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
countValue++;
updateItemAtPosition(pos);
}
});
return convertView;
}
private void updateItemAtPosition(int position) {
int visiblePosition = listView.getFirstVisiblePosition();
View view = listView.getChildAt(position - visiblePosition);
listView.getAdapter().getView(position, view, listView);
holder.count.setText(String.valueOf(countValue));
}
class ViewHolder {
TextView item, count;
Button increase, reduce;
}
}
}